/**
 * @date 2023-07-19 09:34:31
 * Express 内置中间件
 * 4.16.0 开始 内置3个中间件
 * express.static 快速托管静态资源的内置中间件，例如: HTML 文件、图片、CSS 样式等(无兼容性)
 * express,json 解析JSON 格式的请求体数据(有兼容性，仅在4.16.0+ 版本中可用)
 * express.urlencoded 解析 URL-encoded 格式的请求体数据 (有兼容性，仅在 4.16.0+ 版本中可用)
 *
 *
 */
const express = require("express");
const cors = require("cors")    //解决跨域
// const querystring = require("querystring")
const app = express();
// querystring.parse()

// 配置解析 application/json 格式数据的内置中间件
app.use(express.json());
// 配置解析 application/x-www-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({ extended: false }));

app.use(cors())

app.get("/", (req, res) => {
  
  res.send("响应!!");
});

app.get("/api", (req, res) => {
  console.log("获取参数", req.query);
  res.send({
    code: 200,
    data: "响应数据...",
  });
});

app.listen(3560, () => {
  console.log("runing server http://localhost:3560");
});

/**
 * 
 * 
 * 默认情况下，CORS 仅支持客户端向服务器发送如下的9个请求头:
 * Accept、Accept-Language、 Content-Language、DPR、Downlink, Save-Data、 Viewport-Width、 Width 、Content-Type 
 * (值仅限于text/plain、multipart/form-data、 application/x-www-form-urlencoded 
 * 三者之一如果客户端向服务器发送了额外的请求头信息，则需要在服务器端，
 * 通过 Access-Control-Allow-Headers 对额外的请求头进行声明，否则这次请求会失败!
 
*/
/**
 * 默认情况下，CORS 仅支持客户端发起 GET、POST、HEAD 
 * 请求如果客户端希望通过 PUT、DELETE 等方式请求服务器的资源，则需要在服务器端，
 * 通过 Acces-Control-Alow-Methods来指明实际请求所允许使用的 HTTP 方法

*/
// res.setHeader('Acces-Control-Alow-Methods','POST,GET,DELETE,HEAD')
// res.setHeader('Acces-Control-Alow-Methods','*')


/**
 * 同时满足以下两大条件的请求，就属于简单请求
请求方式:GET、POST、HEAD 三者之 
 HTTP 头部信息不超过以下几种字段，无自定义头部字段、
Accept、Accept-Language、Content-Lanquage、DPR.Downlink、Save-Data Viewport-Width、 Width 、Content-Type 
(只有三个值application/x-www-formurlencoded、multipart/form-datatext/plain)
*/
// 只要符合以下任何一个条件的请求，都需要进行预检请求:
// 请求方式为 GET、POST、HEAD 之外的请求 Method 类型1
// 请求头中包含自定义头部字段
//   向服务器发送了 application/json 格式的数据
// 在浏览器与服务器正式通信之前，浏览器会先发送 OPTION 请求进行预检，以获知服务器是否允许该实际请求，
// 所以这一次的OPTION请求称为“预检请求”。服务器成功响应预检请求后，才会发送真正的请求，并目携带直实数掘